package com.ssy.lingxi.logistics.model.response;

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 物流单返回实体
 * @author yzc
 * @version 2.0.0
 * @date 2020/7/20
 */
@Data
public class LogisticsOrderResponse implements Serializable {

    private static final long serialVersionUID = 4561935738570030696L;

    /**
     * 主键id
     */
    private Long id;

    /**
     * 物流单号
     */
    private String logisticsOrderNo;

    /**
     * 外部状态 1-待提交 2-待确认 3-不接受物流单 4-接受物流单
     */
    private Integer status;

    /**
     * 外部状态名称
     */
    private String statusName;

    /**
     * 单据摘要
     */
    private String digest;

    /**
     * 物流服务商id
     */
    private Long companyId;

    /**
     * 物流服务商名称
     */
    private String companyName;

    /**
     * 发货单id
     */
    private Long shipmentOrderId;

    /**
     * 发货单号
     */
    private String shipmentOrderCode;

    /**
     * 对应订单id
     */
    private Long relevanceOrderId;

    /**
     * 对应单据编号
     */
    private String relevanceOrderCode;

    /**
     * 对应单据类型 1-销售订单 2-换货申请单(退货发货) 3-换货申请单(换货发货) 4-退货申请单
     */
    private Integer relevanceType;

    /**
     * 创建方式 1-物流能力创建 2-销售发货订单创建 3-生产通知订单创建 4-换货申请创建 5-换货处理创建 6-退货申请创建
     */
    private Integer createType;

    /**
     * 发货方会员id
     */
    private Long shipperMemberId;

    /**
     * 发货方会员角色id
     */
    private Long shipperRoleId;

    /**
     * 发货方会员名称
     */
    private String shipperMemberName;

    /**
     * 发货方名称
     */
    private String shipperName;

    /**
     * 发货方手机
     */
    private String shipperPhone;

    /**
     * 发货方地址id
     */
    private Long shipperAddressId;

    /**
     * 发货方地址
     */
    private String shipperFullAddress;

    /**
     * 收货方会员id
     */
    private Long receiverMemberId;

    /**
     * 收货方会员角色id
     */
    private Long receiverRoleId;

    /**
     * 收货方会员名称
     */
    private String receiverMemberName;

    /**
     * 收货方名称
     */
    private String receiverName;

    /**
     * 收货方手机
     */
    private String receiverPhone;

    /**
     * 收货方地址id
     */
    private Long receiverAddressId;

    /**
     * 收货人全地址
     */
    private String receiverFullAddress;

    /**
     * 单据时间
     */
    private Long invoicesTime;

    /**
     * 总箱数
     */
    private Double totalCarton;

    /**
     * 总重量
     */
    private Double totalWeight;

    /**
     * 总体积
     */
    private Double totalVolume;

    /**
     * 运费
     */
    private BigDecimal freightPrice;

    /**
     * 是否含税 0-否 1-是
     */
    private Integer taxInclusive;

    /**
     * 税率(小数, 50% = 0.50)
     */
    private Double taxRate;

    /**
     * 结算方式
     */
    private String settlementWay;

    /**
     * 物流单明细列表
     */
    private List<LogisticsOrderDetailResponse> detailList;

    /**
     * 物流单外部流转
     */
    List<LogisticsOrderExternalResponse> externalList;

    /**
     * 单据流转记录
     */
    private List<LogisticsOrderLogResponse> logisticsOrderLogList;

    @Data
    public static class LogisticsOrderDetailResponse implements Serializable {

        private static final long serialVersionUID = 8518685419049070746L;

        /**
         * 商品id
         */
        private Long productId;

        /**
         * 商品名称
         */
        private String productName;

        /**
         * 类别名称
         */
        private String categoryName;

        /**
         * 品牌名称
         */
        private String brandName;

        /**
         * 单位名称
         */
        private String unitName;

        /**
         * 数量
         */
        private Double amount;

        /**
         * 箱数
         */
        private Double carton;

        /**
         * 重量
         */
        private Double weight;

        /**
         * 体积
         */
        private Double volume;

    }

    @Data
    public static class LogisticsOrderExternalResponse implements Serializable {

        private static final long serialVersionUID = -4463983289160153168L;

        /**
         * 物流单流程步骤
         */
        private Integer step;

        /**
         * 物流单流程步骤名称
         */
        private String stepName;

        /**
         * 物流单角色
         */
        private String roleName;

        /**
         * 此流程是否已经执行 0-否 1-是
         */
        private Integer isExecute;
    }


    @Data
    public static class LogisticsOrderLogResponse implements Serializable {

        private static final long serialVersionUID = 2074508207738012261L;

        /**
         * 记录Id
         */
        private Long id;

        /**
         * 操作时间
         */
        private Long createTime;

        /**
         * 操作角色
         */
        private String operatorRoleName;

        /**
         * 外部状态枚举
         */
        private Integer status;

        /**
         * 外部状态名称
         */
        private String statusName;

        /**
         * 操作
         */
        private String operation;

        /**
         * 审核意见
         */
        private String remark;
    }
}
